package com.proxy.demo06;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 处理程序：代理类的增强处理逻辑在这个程序中实现
 */
public class TeacherServiceInvocationHandler implements InvocationHandler {
    //代理类中的真实对象,也即被代理类代理的真实对象（被代理对象）
    private Object target;

    //构造函数，传递真实对象给处理程序，处理程序就知道代理的真实对象
    public TeacherServiceInvocationHandler(Object target){
        System.out.println("Handler 构造函数");
        this.target = target;
    }


    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //在真实的对象执行之前我们可以添加自己的操作
        System.out.println("before invoke..."+method.getName());
        Object invoke = method.invoke(target, args);// 真实对象方法调用的返回值
        //在真实的对象执行之后我们可以添加自己的操作
        System.out.println("after invoke..."+method.getName());
        return invoke;// 返回真实对象方法调用的返回值
    }
}
